<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="./js/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <App></App>
    </div>
  </body>
</html>
<script>
  Vue.config.productionTip = false;

  /*
    创建组件：
      Vue.extend(options)：
        1.options的写法和new Vue时的options写法类似，只是没有el选项，因为只有vm决定服务哪一个容器，而组件都是基于vm的
        2.我们希望给每一个组件都添加一个name配置项，代表当前组件的名称，目前的作用是为了在开发者工具区分组件
        3.Vue.extend返回一个VueComponent构造函数，每次组件在使用的时候，都会被实例化，得到一个组件实例
        4.组件的模板有且只能有一个根元素

    组件的使用：
      1.首先创建一个组件，得到一个VueComponent构造函数
      2.要遭父组件或者vm实例中进行注册，才可以使用，需要使用component配置项进行注册
      3.在模板中通过标签的方式使用组件，单双标签都可以（在非单文件组件中，组件尽量写成双标签）
  */

  const App = Vue.extend({
    name: 'App',
    template: `
      <h1>App {{message}}</h1>
    `,
    data() {
      return {
        message: 'hello',
      };
    },
  });

  console.log(App, 'App'); // VueComponent构造函数

  const vm = new Vue({
    el: '#app',
    components: {
      App,
    },
    data() {
      return {};
    },
  });
</script>
